//package com.aabbc.aaaaa.utils;
//
//
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.reflect.MethodSignature;
//
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//
///**
// * AspectJ的JoinPoint的工具类，提供通过JoinPoint获取连接点信息的
// *
// * @author 梁志彬 创建日期：2008-12-30
// * @since Authorization 2.0
// */
//public class AspectjJoinPointUtil {
//    /**
//     * 获取连接点的代理对象（目标对象被SpringAOP代理）的当前执行方法对象
//     *
//     * @param joinPoint 连接点对象
//     * @return 连接点的代理对象的当前执行方法对象
//     * @since 2.0
//     */
//    final public static Method getJoinPointProxyMethod(JoinPoint joinPoint) {
//        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
//        return methodSignature.getMethod(); // 代理类的方法对象
//    }
//
//    /**
//     * 获取连接点的目标对象（被SpringAOP代理的对象）的当前执行方法对象。
//     *
//     * @param joinPoint 连接点对象
//     * @return 连接点的目标对象（被SpringAOP代理的对象）的当前执行方法对象
//     * @see getJoinPointProxyMethod(JoinPoint joinPoint)
//     * @since 2.0
//     */
//    final public static Method getJoinPointTargetMethod(JoinPoint joinPoint) {
//        Method proxyMethod = getJoinPointProxyMethod(joinPoint); // 代理类的方法对象
//        try {
//            return joinPoint.getTarget().getClass().getMethod(proxyMethod.getName(), proxyMethod.getParameterTypes());
//        } catch (SecurityException e) {
//            throw new RuntimeException("Unknow reason.", e);
//        } catch (NoSuchMethodException e) {
//            throw new RuntimeException("Unknow reason.", e);
//        }
//    }
//
//    /**
//     * 获取连接点的目标对象（被SpringAOP代理的对象）的当前执行方法的全限度名。
//     *
//     * @param joinPoint 连接点对象
//     * @return 连接点的目标对象（被SpringAOP代理的对象）的当前执行方法的全限度名
//     * @since 2.0
//     */
//    final public static String getJoinPointTargetMethodQualifiedName(JoinPoint joinPoint) {
//        String targetClassName = joinPoint.getTarget().getClass().getName();
//        return targetClassName + "." + getJoinPointTargetMethod(joinPoint).getName();
//    }
//
//
//    /**
//     * 获取连接点的目标对象（被SpringAOP代理的对象）的当前执行方法的定义全限度名。
//     * 方法的定义全限定名是指：定义方法的类或接口全限定名 + 方法名
//     *
//     * @param joinPoint 连接点对象
//     * @return 连接点的目标对象（被SpringAOP代理的对象）的当前执行方法的全限度名
//     * @since 2.0
//     */
//    final public static String getJoinPointTargetDeclaringMethodQualifiedName(JoinPoint joinPoint) {
//        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
//        Method proxyMethod = methodSignature.getMethod(); // 代理类的方法对象
//        return proxyMethod.getDeclaringClass().getName() + "." + getJoinPointTargetMethod(joinPoint).getName();
//    }
//
//
//    /**
//     * 获取符合JaveBean规范的属性getter方法名（即getXXX）。
//     *
//     * @param field
//     * @return
//     * @since 2.0
//     */
//    final public static String getGetterMethodNameByField(Field field) {
//        String fieldName = field.getName();
//        String methodName = "get" + upperCaseThe1stLetter(fieldName);
//        return methodName;
//    }
//
//    /**
//     *
//     * 获取符合JaveBean规范的boolean属性的getter方法名（即isXXX）。
//     *
//     * @param field
//     * @return
//     * @since 2.0
//     */
//    final public static String getGetterMethodNameByBooleanField(Field field) {
//        String fieldName = field.getName();
//        String methodName = "is" + upperCaseThe1stLetter(fieldName);
//        return methodName;
//    }
//
//    /**
//     * 把单词的第一个字母转换为大写
//     *
//     * @param str
//     * @return
//     * @since 2.0
//     */
//    private static String upperCaseThe1stLetter(String str) {
//        String firstLetter = str.substring(0, 1);
//        String firstLetterInUpperCase = firstLetter.toUpperCase();
//        return str.replaceFirst(firstLetter, firstLetterInUpperCase);
//    }
//}